home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_200 / 284_01 / trace.c < prev    next >
Text File  |  1989-03-11  |  12KB  |  415 lines

  1. /* trace.c - 8080 instruction tracer                    */
  2.  
  3. #include <stdio.h>
  4. #include "compile.h"
  5. #include "config.h"
  6. #include "defs.h"
  7.  
  8. #ifndef isdigit
  9. #define isdigit(c)    ( (c) >= '0' && (c) <= '9' )
  10. #endif
  11.  
  12. #define X        RegX(*rp)
  13. #define A        RegA(*rp)
  14. #define C        RegC(*rp)
  15. #define BC        RegBC(*rp)
  16. #define DE        RegDE(*rp)
  17. #define HL        RegHL(*rp)
  18.  
  19. #define Addr(x)        ( ( WORD )( (x) - Mem ) )
  20.  
  21. BOOL tflag = 0;        /* trace modes: 1 for mnemonic, 2 for registers,  */
  22.             /*        4 for statistics          */
  23.  
  24. WORD trlo = 0;        /* lowest  address of trace range */
  25. WORD trhi = MEMSIZE;    /* highest address of trace range */
  26.  
  27. #if TRACE
  28.  
  29. long Freq [ 256 ];    /* frequency counter */
  30.  
  31. /* mnemonic table for dis-assembling */
  32.  
  33. struct { short args; char * mnem; } OpCode [ 256 ] = {
  34.     /* 0x00 */ { 0, "NOP"      },
  35.     /* 0x01 */ { 2, "LXI  B,"  },
  36.     /* 0x02 */ { 0, "STAX B"   },
  37.     /* 0x03 */ { 0, "INX  B"   },
  38.     /* 0x04 */ { 0, "INR  B"   },
  39.     /* 0x05 */ { 0, "DER  B"   },
  40.     /* 0x06 */ { 1, "MVI  B,"  },
  41.     /* 0x07 */ { 0, "RLC"      },
  42.     /* 0x08 */ { 0, "???"      },
  43.     /* 0x09 */ { 0, "DAD  B"   },
  44.     /* 0x0A */ { 0, "LDAX B"   },
  45.     /* 0x0B */ { 0, "DEX  B"   },
  46.     /* 0x0C */ { 0, "INR  C"   },
  47.     /* 0x0D */ { 0, "DER  C"   },
  48.     /* 0x0E */ { 1, "MVI  C,"  },
  49.     /* 0x0F */ { 0, "RRC"      },
  50.     /* 0x10 */ { 0, "???"      },
  51.     /* 0x11 */ { 2, "LXI  D,"  },
  52.     /* 0x12 */ { 0, "STAX D"   },
  53.     /* 0x13 */ { 0, "INX  D"   },
  54.     /* 0x14 */ { 0, "INR  D"   },
  55.     /* 0x15 */ { 0, "DCR  D"   },
  56.     /* 0x16 */ { 1, "MVI  D,"  },
  57.     /* 0x17 */ { 0, "RAL"      },
  58.     /* 0x18 */ { 0, "???"      },
  59.     /* 0x19 */ { 0, "DAD  D"   },
  60.     /* 0x1A */ { 0, "LDAX D"   },
  61.     /* 0x1B */ { 0, "DEX  D"   },
  62.     /* 0x1C */ { 0, "INR  E"   },
  63.     /* 0x1D */ { 0, "DER  E"   },
  64.     /* 0x1E */ { 1, "MVI  E,"  },
  65.     /* 0x1F */ { 0, "RRA"      },
  66.     /* 0x20 */ { 0, "???"      },
  67.     /* 0x21 */ { 2, "LXI  H,"  },
  68.     /* 0x22 */ { 2, "SHLD "    },
  69.     /* 0x23 */ { 0, "INX  H"   },
  70.     /* 0x24 */ { 0, "INR  H"   },
  71.     /* 0x25 */ { 0, "DER  H"   },
  72.     /* 0x26 */ { 1, "MVI  H,"  },
  73.     /* 0x27 */ { 0, "DAA"      },
  74.     /* 0x28 */ { 0, "???"      },
  75.     /* 0x29 */ { 0, "DAD  H"   },
  76.     /* 0x2A */ { 2, "LHLD "    },
  77.     /* 0x2B */ { 0, "DEX  H"   },
  78.     /* 0x2C */ { 0, "INR  L"   },
  79.     /* 0x2D */ { 0, "DER  L"   },
  80.     /* 0x2E */ { 1, "MVI  L,"  },
  81.     /* 0x2F */ { 0, "CMA"      },
  82.     /* 0x30 */ { 0, "???"      },
  83.     /* 0x31 */ { 2, "LXI  SP," },
  84.     /* 0x32 */ { 2, "STA  "    },
  85.     /* 0x33 */ { 0, "INX  SP"  },
  86.     /* 0x34 */ { 0, "INR  M"   },
  87.     /* 0x35 */ { 0, "DER  M"   },
  88.     /* 0x36 */ { 1, "MVI  M,"  },
  89.     /* 0x37 */ { 0, "STC"      },
  90.     /* 0x38 */ { 0, "???"      },
  91.     /* 0x39 */ { 0, "DAD  SP"  },
  92.     /* 0x3A */ { 2, "LDA  "    },
  93.     /* 0x3B */ { 0, "DEX  SP"  },
  94.     /* 0x3C */ { 0, "INR  A"   },
  95.     /* 0x3D */ { 0, "DER  A"   },
  96.     /* 0x3E */ { 1, "MVI  A,"  },
  97.     /* 0x3F */ { 0, "CMC"      },
  98.     /* 0x40 */ { 0, "MOV  B,B" },
  99.     /* 0x41 */ { 0, "MOV  B,C" },
  100.     /* 0x42 */ { 0, "MOV  B,D" },
  101.     /* 0x43 */ { 0, "MOV  B,E" },
  102.     /* 0x44 */ { 0, "MOV  B,H" },
  103.     /* 0x45 */ { 0, "MOV  B,L" },
  104.     /* 0x46 */ { 0, "MOV  B,M" },
  105.     /* 0x47 */ { 0, "MOV  B,A" },
  106.     /* 0x48 */ { 0, "MOV  C,B" },
  107.     /* 0x49 */ { 0, "MOV  C,C" },
  108.     /* 0x4A */ { 0, "MOV  C,D" },
  109.     /* 0x4B */ { 0, "MOV  C,E" },
  110.     /* 0x4C */ { 0, "MOV  C,H" },
  111.     /* 0x4D */ { 0, "MOV  C,L" },
  112.     /* 0x4E */ { 0, "MOV  C,M" },
  113.     /* 0x4F */ { 0, "MOV  C,A" },
  114.     /* 0x50 */ { 0, "MOV  D,B" },
  115.     /* 0x51 */ { 0, "MOV  D,C" },
  116.     /* 0x52 */ { 0, "MOV  D,D" },
  117.     /* 0x53 */ { 0, "MOV  D,E" },
  118.     /* 0x54 */ { 0, "MOV  D,H" },
  119.     /* 0x55 */ { 0, "MOV  D,L" },
  120.     /* 0x56 */ { 0, "MOV  D,M" },
  121.     /* 0x57 */ { 0, "MOV  D,A" },
  122.     /* 0x58 */ { 0, "MOV  E,B" },
  123.     /* 0x59 */ { 0, "MOV  E,C" },
  124.     /* 0x5A */ { 0, "MOV  E,D" },
  125.     /* 0x5B */ { 0, "MOV  E,E" },
  126.     /* 0x5C */ { 0, "MOV  E,H" },
  127.     /* 0x5D */ { 0, "MOV  E,L" },
  128.     /* 0x5E */ { 0, "MOV  E,M" },
  129.     /* 0x5F */ { 0, "MOV  E,A" },
  130.     /* 0x60 */ { 0, "MOV  H,B" },
  131.     /* 0x61 */ { 0, "MOV  H,C" },
  132.     /* 0x62 */ { 0, "MOV  H,D" },
  133.     /* 0x63 */ { 0, "MOV  H,E" },
  134.     /* 0x64 */ { 0, "MOV  H,H" },
  135.     /* 0x65 */ { 0, "MOV  H,L" },
  136.     /* 0x66 */ { 0, "MOV  H,M" },
  137.     /* 0x67 */ { 0, "MOV  H,A" },
  138.     /* 0x68 */ { 0, "MOV  L,B" },
  139.     /* 0x69 */ { 0, "MOV  L,C" },
  140.     /* 0x6A */ { 0, "MOV  L,D" },
  141.     /* 0x6B */ { 0, "MOV  L,E" },
  142.     /* 0x6C */ { 0, "MOV  L,H" },
  143.     /* 0x6D */ { 0, "MOV  L,L" },
  144.     /* 0x6E */ { 0, "MOV  L,M" },
  145.     /* 0x6F */ { 0, "MOV  L,A" },
  146.     /* 0x70 */ { 0, "MOV  M,B" },
  147.     /* 0x71 */ { 0, "MOV  M,C" },
  148.     /* 0x72 */ { 0, "MOV  M,D" },
  149.     /* 0x73 */ { 0, "MOV  M,E" },
  150.     /* 0x74 */ { 0, "MOV  M,H" },
  151.     /* 0x75 */ { 0, "MOV  M,L" },
  152.     /* 0x76 */ { 0, "HLT"      },
  153.     /* 0x77 */ { 0, "MOV  M,A" },
  154.     /* 0x78 */ { 0, "MOV  A,B" },
  155.     /* 0x79 */ { 0, "MOV  A,C" },
  156.     /* 0x7A */ { 0, "MOV  A,D" },
  157.     /* 0x7B */ { 0, "MOV  A,E" },
  158.     /* 0x7C */ { 0, "MOV  A,H" },
  159.     /* 0x7D */ { 0, "MOV  A,L" },
  160.     /* 0x7E */ { 0, "MOV  A,M" },
  161.     /* 0x7F */ { 0, "MOV  A,A" },
  162.     /* 0x80 */ { 0, "ADD  B"   },
  163.     /* 0x81 */ { 0, "ADD  C"   },
  164.     /* 0x82 */ { 0, "ADD  D"   },
  165.     /* 0x83 */ { 0, "ADD  E"   },
  166.     /* 0x84 */ { 0, "ADD  H"   },
  167.     /* 0x85 */ { 0, "ADD  L"   },
  168.     /* 0x86 */ { 0, "ADD  M"   },
  169.     /* 0x87 */ { 0, "ADD  A"   },
  170.     /* 0x88 */ { 0, "ADC  B"   },
  171.     /* 0x89 */ { 0, "ADC  C"   },
  172.     /* 0x8A */ { 0, "ADC  D"   },
  173.     /* 0x8B */ { 0, "ADC  E"   },
  174.     /* 0x8C */ { 0, "ADC  H"   },
  175.     /* 0x8D */ { 0, "ADC  L"   },
  176.     /* 0x8E */ { 0, "ADC  M"   },
  177.     /* 0x8F */ { 0, "ADC  A"   },
  178.     /* 0x90 */ { 0, "SUB  B"   },
  179.     /* 0x91 */ { 0, "SUB  C"   },
  180.     /* 0x92 */ { 0, "SUB  D"   },
  181.     /* 0x93 */ { 0, "SUB  E"   },
  182.     /* 0x94 */ { 0, "SUB  H"   },
  183.     /* 0x95 */ { 0, "SUB  L"   },
  184.     /* 0x96 */ { 0, "SUB  M"   },
  185.     /* 0x97 */ { 0, "SUB  A"   },
  186.     /* 0x98 */ { 0, "SBB  B"   },
  187.     /* 0x99 */ { 0, "SBB  C"   },
  188.     /* 0x9A */ { 0, "SBB  D"   },
  189.     /* 0x9B */ { 0, "SBB  E"   },
  190.     /* 0x9C */ { 0, "SBB  H"   },
  191.     /* 0x9D */ { 0, "SBB  L"   },
  192.     /* 0x9E */ { 0, "SBB  M"   },
  193.     /* 0x9F */ { 0, "SBB  A"   },
  194.     /* 0xA0 */ { 0, "ANA  B"   },
  195.     /* 0xA1 */ { 0, "ANA  C"   },
  196.     /* 0xA2 */ { 0, "ANA  D"   },
  197.     /* 0xA3 */ { 0, "ANA  E"   },
  198.     /* 0xA4 */ { 0, "ANA  H"   },
  199.     /* 0xA5 */ { 0, "ANA  L"   },
  200.     /* 0xA6 */ { 0, "ANA  M"   },
  201.     /* 0xA7 */ { 0, "ANA  A"   },
  202.     /* 0xA8 */ { 0, "XRA  B"   },
  203.     /* 0xA9 */ { 0, "XRA  C"   },
  204.     /* 0xAA */ { 0, "XRA  D"   },
  205.     /* 0xAB */ { 0, "XRA  E"   },
  206.     /* 0xAC */ { 0, "XRA  H"   },
  207.     /* 0xAD */ { 0, "XRA  L"   },
  208.     /* 0xAE */ { 0, "XRA  M"   },
  209.     /* 0xAF */ { 0, "XRA  A"   },
  210.     /* 0xB0 */ { 0, "ORA  B"   },
  211.     /* 0xB1 */ { 0, "ORA  C"   },
  212.     /* 0xB2 */ { 0, "ORA  D"   },
  213.     /* 0xB3 */ { 0, "ORA  E"   },
  214.     /* 0xB4 */ { 0, "ORA  H"   },
  215.     /* 0xB5 */ { 0, "ORA  L"   },
  216.     /* 0xB6 */ { 0, "ORA  M"   },
  217.     /* 0xB7 */ { 0, "ORA  A"   },
  218.     /* 0xB8 */ { 0, "CMP  B"   },
  219.     /* 0xB9 */ { 0, "CMP  C"   },
  220.     /* 0xBA */ { 0, "CMP  D"   },
  221.     /* 0xBB */ { 0, "CMP  E"   },
  222.     /* 0xBC */ { 0, "CMP  H"   },
  223.     /* 0xBD */ { 0, "CMP  L"   },
  224.     /* 0xBE */ { 0, "CMP  M"   },
  225.     /* 0xBF */ { 0, "CMP  A"   },
  226.     /* 0xC0 */ { 0, "RNZ"      },
  227.     /* 0xC1 */ { 0, "POP  B"   },
  228.     /* 0xC2 */ { 2, "JNZ  "    },
  229.     /* 0xC3 */ { 2, "JMP  "    },
  230.     /* 0xC4 */ { 2, "CNZ  "    },
  231.     /* 0xC5 */ { 0, "PUSH B"   },
  232.     /* 0xC6 */ { 1, "ADI  "    },
  233.     /* 0xC7 */ { 0, "RST  0"   },
  234.     /* 0xC8 */ { 0, "RZ"       },
  235.     /* 0xC9 */ { 0, "RET"      },
  236.     /* 0xCA */ { 2, "JZ      "    },
  237.     /* 0xCB */ { 0, "???"      },
  238.     /* 0xCC */ { 2, "CZ      "    },
  239.     /* 0xCD */ { 2, "CALL "    },
  240.     /* 0xCE */ { 1, "ACI  "    },
  241.     /* 0xCF */ { 0, "RST  1"   },
  242.     /* 0xD0 */ { 0, "RNC"      },
  243.     /* 0xD1 */ { 0, "POP  D"   },
  244.     /* 0xD2 */ { 2, "JNC  "    },
  245.     /* 0xD3 */ { 1, "OUT  "    },
  246.